% 第一题 task 1

% 原图
label="原图";
image_task1=imread("图片一.jpg");
imwrite(image_task1,label+".jpg");

% 灰度图像
label="灰度图";
gray_image_task1=rgb2gray(image_task1);
imwrite(gray_image_task1,label+".jpg");

% 二值图像
label="二值图";
bw_image_task1=imbinarize(gray_image_task1);
imwrite(bw_image_task1,label+".jpg");

% 第二题 task 2

image_1_task2=imread("图片二.jpg");
image_2_task2=imread("图片四.jpg");

img_1_task2=double(image_1_task2);
img_2_t2=double(image_2_task2);
img_2_t2=imresize(img_2_t2,size(img_1_task2,1,2));
% 1 2：取size前两个通道（长宽）
imshow(uint8(img_2_t2));
title("变形后的图片");

% 加法

label="加法结果";
img_temp_task2=(img_2_t2+img_1_task2)/2;
imwrite(uint8(img_temp_task2),label+".jpg");

% 减法

label="减法结果";
img_temp_task2=(img_2_t2-img_1_task2);


f_input=img_temp_task2;

%max min都要套三次：二位矩阵 三通道
max_pix=max(max(max(f_input)));
min_pix=min(min(min(f_input)));
% 归入0-255
f_input=f_input-min_pix;
f_input=(f_input./(max_pix-min_pix)).*double(0xff);

img_temp_task2=f_input;

imwrite(uint8(img_temp_task2),label+".jpg");

% 乘法
label="乘法结果";
img_temp_task2=(img_2_t2.*img_1_task2);
max_pix=max(max(img_temp_task2(:,:,1)));
"乘法"
max_pix
img_temp_task2=(img_temp_task2./max_pix).*double(0xff);
imwrite(uint8(img_temp_task2),label+".jpg");

% 除法

label="除法结果";
img_temp_task2=(img_2_t2./img_1_task2);
max_pix=max(max(max(img_temp_task2(:,:,1))));
"除法"
max_pix
img_temp_int_task2=(img_temp_task2./max_pix).*double(0xff);
imwrite(img_temp_task2,label+".jpg");

% 第三题 task 3

% 线性变亮

label="线性变亮";
img_task3=double(imread("图片一.jpg"));
img_task3=img_task3.*2;
imwrite(uint8(img_task3),label+".jpg");

% 线性变暗

label="线性变暗";
img_task3=double(imread("图片一.jpg"));
img_task3=img_task3.*0.5;
imwrite(uint8(img_task3),label+".jpg");

%负片
label="负片";
img_task3=uint8(imread("图片一.jpg"));
reverse_img=double(255)-double(img_task3);
imwrite(uint8(reverse_img),label+".jpg");

% 对数变换
label="对数变换";
f_input=log(double(img_task3+1));
% max min都要套三次：二位矩阵 三通道
max_pix=max(max(max(f_input)));
min_pix=min(min(min(f_input)));
"log"
max_pix
min_pix
% 归入0-255
f_input=f_input-min_pix;
f_input=(f_input./(max_pix-min_pix)).*double(0xff);
img_log_task3=f_input;

imwrite(uint8(img_log_task3),label+".jpg");

% 指数变换
label="指数变换";
f_input=(img_task3-1).^2;
% max min都要套三次：二位矩阵 三通道
max_pix=max(max(max(f_input)));
min_pix=min(min(min(f_input)));
"log"
max_pix
min_pix
% 归入0-255
f_input=f_input-min_pix;
f_input=(f_input./(max_pix-min_pix)).*double(0xff);
img_exp_task3=f_input;

imwrite(uint8(img_exp_task3),label+".jpg");

% task 4
label="均衡化"
img_task4=imread("图片一.jpg");
figure,
imhist(img_task4);

img_histeq=histeq(img_task4,double(256));
figure,
imhist(img_histeq);
imwrite(img_histeq,label+".jpg");

% task 5
img_task5=imread("图片一.jpg");

height=size(img_task5,1);
width=size(img_task5,2);
img_task=[zeros(height,50,3),img_task5];
height=size(img_task,1);
width=size(img_task,2);
img_task=[zeros(50,width,3);img_task];

imwrite(img_task,"平移.jpg");

img_task=imresize(img_task5,[height/4,width/4]);
imwrite(img_task,"缩小.jpg");

img_task=imresize(img_task5,[height*2,width*2]);
imwrite(img_task,"放大.jpg");

% 之后傅里叶变换旋转还是这张图
img_task=imrotate(img_task5,45);
imwrite(uint8(img_task),"旋转.jpg");

imwrite(fliplr(img_task5),"左右翻转.jpg");
  
% task 6
imwrite(fft(img_task5),"原图傅里叶变换.jpg");
imwrite(fft(img_task),"旋转图傅里叶变换.jpg");

% task 7
im_noised=imnoise(img_task5);
imwrite(im_noised,"加椒盐噪声.jpg");
gf_filter=[1,1,1;1,1,1;1,1,1];
gf_filter=double(gf_filter)/9.;
avg_filtered=imfilter(double(im_noised),gf_filter);
imwrite(uint8(avg_filtered),"均值滤波.jpg");

%这是从matlab官网上看来的
[w_filtered,w_noise]=wiener2(gray_image_task1,[3 3]);
imwrite(w_filtered,"其他滤波器.jpg");

% task 8 
imwrite(edge(gray_image_task1,"sobel"),"索贝尔算子.jpg");
imwrite(edge(gray_image_task1,"log"),"拉普拉斯算子.jpg")


